package 算法.位运算;

public class JZ15二进制中1的个数 {
    //循环按位比较法
    public int NumberOf1(int n) {
        int res = 0;
        //遍历32位
        for(int i = 0; i < 32; i++){
            //按位比较
            if((n&(1<<i))!=0)
                res++;
        }
        return  res;
    }

    //位运算优化法
    //有一个性质 n & (n-1) , 会将n的二进制中最低位由 1 变为 0
    public int NumberOf12(int n) {
        int res = 0;
        //当n为0时停止比较
        while(n != 0){
            n &= n - 1;
            res++;
        }
        return res;
    }
}
